package com.btech.dftp.dataimport.task;

import java.util.List;
import java.util.Map;

import org.quincy.rock.core.util.CoreUtil;
import org.quincy.rock.core.util.MapUtil;
import org.quincy.rock.core.util.RockUtil;
import org.quincy.rock.core.util.StringUtil;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.btech.dftp.dataimport.dao.ConsigneeDao;
import com.btech.dftp.dataimport.dao.CountryDao;
import com.btech.dftp.dataimport.dao.CurrencyTypeDao;
import com.btech.dftp.dataimport.dao.CustomsDeclarationDao;
import com.btech.dftp.dataimport.dao.GoodsDao;
import com.btech.dftp.dataimport.dao.ShipperDao;

/**
 * <b>进口货物导入库任务。</b>
 * <p><b>详细说明：</b></p>
 * <!-- 在此添加详细说明 -->
 * 无。
 * <p><b>修改列表：</b></p>
 * <table width="100%" cellSpacing=1 cellPadding=3 border=1>
 * <tr bgcolor="#CCCCFF"><td>序号</td><td>作者</td><td>修改日期</td><td>修改内容</td></tr>
 * <!-- 在此添加修改列表，参考第一行内容 -->
 * <tr><td>1</td><td>wks</td><td>2022年4月24日 上午11:39:45</td><td>建立类型</td></tr>
 * 
 * </table>
 * @version 1.0
 * @author wks
 * @since 1.0
 */
@Service
public class ImportGoodsTask {
	private static final Logger LOGGER = RockUtil.getLogger(ImportGoodsTask.class);

	@Autowired
	private CountryDao countryDao;

	@Autowired
	private CurrencyTypeDao currencyTypeDao;

	@Autowired
	private ShipperDao shipperDao;

	@Autowired
	private ConsigneeDao consigneeDao;

	@Autowired
	private GoodsDao goodsDao;

	@Autowired
	private CustomsDeclarationDao customsDeclarationDao;

	/**
	 * <b>getBatchSize。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @return
	 */
	public int getBatchSize() {
		return customsDeclarationDao.getBatchSize();
	}

	/**
	 * <b>setBatchSize。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @param batchSize
	 */
	public void setBatchSize(int batchSize) {
		customsDeclarationDao.setBatchSize(batchSize);
	}

	/**
	 * <b>处理数据。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 * @param data 
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void processData(Map<String, Object> data) {
		String name;
		Long id;
		//originCountry
		name = MapUtil.getString(data, "originCountry");
		if (StringUtil.isBlank(name)) {
			data.put("originCountryId", null);
		} else {
			id = countryDao.getId(name, null);
			data.put("originCountryId", id);
		}
		//currencyType
		name = MapUtil.getString(data, "currencyType");
		if (StringUtil.isBlank(name)) {
			data.put("currencyTypeId", null);
		} else {
			id = currencyTypeDao.getId(name, null);
			data.put("currencyTypeId", id);
		}
		//shipper	
		name = MapUtil.getString(data, "shipper");
		if (StringUtil.isBlank(name)) {
			data.put("shipperId", null);
		} else {
			id = shipperDao.getId(name, null);
			data.put("shipperId", id);
		}
		//consignee
		name = MapUtil.getString(data, "consignee");
		if (StringUtil.isBlank(name)) {
			data.put("consigneeId", null);
		} else {
			id = consigneeDao.getId(name, null);
			data.put("consigneeId", id);
		}
		//detail
		List<Map<String, Object>> details = (List) data.get("detail");
		if (!CoreUtil.isEmpty(details)) {
			for (Map<String, Object> detail : details) {
				name = MapUtil.getString(detail, "goodsName");
				id = goodsDao.getId(name, null);
				detail.put("goodsId", id);
			}
		}
		try {
			customsDeclarationDao.insertData(data);
		} catch (Exception e) {
			LOGGER.error(e.getMessage(), e);
		}
	}

	/**
	 * <b>调用该方法完成任务。</b>
	 * <p><b>详细说明：</b></p>
	 * <!-- 在此添加详细说明 -->
	 * 无。
	 */
	public void finish() {
		try {
			customsDeclarationDao.flush();
		} catch (Exception e) {
			LOGGER.error(e.getMessage(), e);
		}
		LOGGER.info("The Task completed.");
	}
}
